<?xml version="1.0" encoding="UTF-8"?>
<GenerateModel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="generateMetaModel_Module.xsd">
  <PythonExport
      Father="PyObjectBase"
      Name="BoundBoxPy"
      Twin="BoundBox"
      TwinPointer="BoundBox3d"
      Include="Base/BoundBox.h"
      FatherInclude="Base/PyObjectBase.h"
      Namespace="Base"
      Constructor="true"
      Delete="true"
      FatherNamespace="Base">
    <Documentation>
      <Author Licence="LGPL" Name="Juergen Riegel" EMail="FreeCAD@juergen-riegel.net" />
      <DeveloperDocu>This is the BoundBox export class</DeveloperDocu>
      <UserDocu>Base.BoundBox class.

This class represents a bounding box.
A bounding box is a rectangular cuboid which is a way to describe outer
boundaries and is obtained from a lot of 3D types.
It is often used to check if a 3D entity lies in the range of another object.
Checking for bounding interference first can save a lot of computing time!
An invalid BoundBox is represented by inconsistent values at each direction:
The maximum float value of the system at the minimum coordinates, and the
opposite value at the maximum coordinates.

The following constructors are supported:

BoundBox()
Empty constructor. Returns an invalid BoundBox.

BoundBox(boundBox)
Copy constructor.
boundBox : Base.BoundBox

BoundBox(xMin, yMin=0, zMin=0, xMax=0, yMax=0, zMax=0)
Define from the minimum and maximum values at each direction.
xMin : float
    Minimum value at x-coordinate.
yMin : float
    Minimum value at y-coordinate.
zMin : float
    Minimum value at z-coordinate.
xMax : float
    Maximum value at x-coordinate.
yMax : float
    Maximum value at y-coordinate.
zMax : float
    Maximum value at z-coordinate.

App.BoundBox(min, max)
Define from two containers representing the minimum and maximum values of the
coordinates in each direction.
min : Base.Vector, tuple
    Minimum values of the coordinates.
max : Base.Vector, tuple
    Maximum values of the coordinates.</UserDocu>
    </Documentation>
    <Methode Name="setVoid">
      <Documentation>
        <UserDocu>setVoid() -> None

Invalidate the bounding box.</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="isValid">
      <Documentation>
        <UserDocu>isValid() -> bool

Checks if the bounding box is valid.</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="add">
      <Documentation>
        <UserDocu>add(minMax) -> None
add(x, y, z) -> None

Increase the maximum values or decrease the minimum values of this BoundBox by
replacing the current values with the given values, so the bounding box can grow
but not shrink.

minMax : Base.Vector, tuple
    Values to enlarge at each direction.
x : float
    Value to enlarge at x-direction.
y : float
    Value to enlarge at y-direction.
z : float
    Value to enlarge at z-direction.</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="getPoint">
      <Documentation>
        <UserDocu>getPoint(index) ->Base.Vector

Get the point of the given index.
The index must be in the range of [0, 7].

index : int</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="getEdge">
      <Documentation>
        <UserDocu>getEdge(index) -> tuple of Base.Vector

Get the edge points of the given index.
The index must be in the range of [0, 11].

index : int</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="closestPoint">
      <Documentation>
        <UserDocu>closestPoint(point) -> Base.Vector
closestPoint(x, y, z) -> Base.Vector

Get the closest point of the bounding box to the given point.

point : Base.Vector, tuple
    Coordinates of the given point.
x : float
    X-coordinate of the given point.
y : float
    Y-coordinate of the given point.
z : float
    Z-coordinate of the given point.</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="intersect">
      <Documentation>
        <UserDocu>intersect(boundBox2) -> bool
intersect(base, dir) -> bool

Checks if the given object intersects with this bounding box. That can be
another bounding box or a line specified by base and direction.

boundBox2 : Base.BoundBox
base : Base.Vector, tuple
dir : Base.Vector, tuple</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="intersected">
      <Documentation>
        <UserDocu>intersected(boundBox2) -> Base.BoundBox

Returns the intersection of this and the given bounding box.

boundBox2 : Base.BoundBox</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="united">
      <Documentation>
        <UserDocu>united(boundBox2) -> Base.BoundBox

Returns the union of this and the given bounding box.

boundBox2 : Base.BoundBox</UserDocu>
      </Documentation>
    </Methode>
    <Methode Name="enlarge">
        <Documentation>
            <UserDocu>enlarge(variation) -> None

Decrease the minimum values and increase the maximum values by the given value.
A negative value shrinks the bounding box.

variation : float</UserDocu>
        </Documentation>
    </Methode>

      <Methode Name="getIntersectionPoint">
          <Documentation>
              <UserDocu>getIntersectionPoint(base, dir, epsilon=0.0001) -> Base.Vector

Calculate the intersection point of a line with the bounding box.
The base point must lie inside the bounding box, if not an exception is thrown.

base : Base.Vector
    Base point of the line.
dir : Base.Vector
    Direction of the line.
epsilon : float
    Bounding box size tolerance.</UserDocu>
          </Documentation>
      </Methode>
      <Methode Name="move">
          <Documentation>
              <UserDocu>move(displacement) -> None
move(x, y, z) -> None

Move the bounding box by the given values.

displacement : Base.Vector, tuple
    Displacement at each direction.
x : float
    Displacement at x-direction.
y : float
    Displacement at y-direction.
z : float
    Displacement at z-direction.</UserDocu>
          </Documentation>
      </Methode>
      <Methode Name="scale">
          <Documentation>
              <UserDocu>scale(factor) -> None
scale(x, y, z) -> None

Scale the bounding box by the given values.

factor : Base.Vector, tuple
    Factor scale at each direction.
x : float
    Scale at x-direction.
y : float
    Scale at y-direction.
z : float
    Scale at z-direction.</UserDocu>
          </Documentation>
      </Methode>
      <Methode Name="transformed">
          <Documentation>
              <UserDocu>transformed(matrix) -> Base.BoundBox

Returns a new BoundBox containing the transformed rectangular cuboid
represented by this BoundBox.

matrix : Base.Matrix
    Transformation matrix.</UserDocu>
          </Documentation>
      </Methode>
      <Methode Name="isCutPlane">
      <Documentation>
        <UserDocu>isCutPlane(base, normal) -> bool

Check if the plane specified by base and normal intersects (cuts) this bounding
box.

base : Base.Vector
normal : Base.Vector</UserDocu>
      </Documentation>
    </Methode>
        <Methode Name="isInside">
            <Documentation>
                <UserDocu>isInside(object) -> bool
isInside(x, y, z) -> bool

Check if a point or a bounding box is inside this bounding box.

object : Base.Vector, Base.BoundBox
    Object to check if it is inside this bounding box.
x : float
    X-coordinate of the point to check.
y : float
    Y-coordinate of the point to check.
z : float
    Z-coordinate of the point to check.</UserDocu>
            </Documentation>
        </Methode>
        <Attribute Name="Center" ReadOnly="true">
          <Documentation>
              <UserDocu>Center point of the bounding box.</UserDocu>
          </Documentation>
          <Parameter Name="Center" Type="Object" />
      </Attribute>
      <Attribute Name="XMax" ReadOnly="false">
          <Documentation>
              <UserDocu>The maximum x boundary position.</UserDocu>
          </Documentation>
          <Parameter Name="XMax" Type="Float" />
      </Attribute>
      <Attribute Name="YMax" ReadOnly="false">
          <Documentation>
              <UserDocu>The maximum y boundary position.</UserDocu>
          </Documentation>
          <Parameter Name="YMax" Type="Float" />
      </Attribute>
      <Attribute Name="ZMax" ReadOnly="false">
          <Documentation>
              <UserDocu>The maximum z boundary position.</UserDocu>
          </Documentation>
          <Parameter Name="ZMax" Type="Float" />
      </Attribute>
      <Attribute Name="XMin" ReadOnly="false">
          <Documentation>
              <UserDocu>The minimum x boundary position.</UserDocu>
          </Documentation>
          <Parameter Name="XMin" Type="Float" />
      </Attribute>
      <Attribute Name="YMin" ReadOnly="false">
          <Documentation>
              <UserDocu>The minimum y boundary position.</UserDocu>
          </Documentation>
          <Parameter Name="YMin" Type="Float" />
      </Attribute>
      <Attribute Name="ZMin" ReadOnly="false">
          <Documentation>
              <UserDocu>The minimum z boundary position.</UserDocu>
          </Documentation>
          <Parameter Name="ZMin" Type="Float" />
      </Attribute>
      <Attribute Name="XLength" ReadOnly="true">
          <Documentation>
              <UserDocu>Length of the bounding box in x direction.</UserDocu>
          </Documentation>
          <Parameter Name="XLength" Type="Float" />
      </Attribute>
      <Attribute Name="YLength" ReadOnly="true">
          <Documentation>
              <UserDocu>Length of the bounding box in y direction.</UserDocu>
          </Documentation>
          <Parameter Name="YLength" Type="Float" />
      </Attribute>
      <Attribute Name="ZLength" ReadOnly="true">
          <Documentation>
              <UserDocu>Length of the bounding box in z direction.</UserDocu>
          </Documentation>
          <Parameter Name="ZLength" Type="Float" />
      </Attribute>
       <Attribute Name="DiagonalLength" ReadOnly="true">
          <Documentation>
              <UserDocu>Diagonal length of the bounding box.</UserDocu>
          </Documentation>
          <Parameter Name="DiagonalLength" Type="Float" />
      </Attribute>
  </PythonExport>
</GenerateModel>
